﻿using System;
using System.Collections.Generic;
using System.Text;

namespace net.UyghurDev.Tools
{
    /// <summary>
    /// ئۇيغۇرچە چىسلا ھاسىل قىلىش
    /// <para>ئاپتۇرى: سارۋان</para>
    /// <para>ئۇيغۇر يۇمشاق دېتال ئىجادىيەت تورى</para>
    /// <para>2008-6-2</para>
    /// </summary>
    public class UDateTime
    {
        private DateTime _CurrentDateTime;
        private System.Collections.Hashtable UyghurMonthName;
        private System.Collections.Hashtable LatinMonthName;
    
        public UDateTime()
        {
            //دەسلەپلەشتۈرىدۇ
            initialize();
        }
        public UDateTime(DateTime dt)
        {
            CurrentDateTime = dt;
            //دەسلەپلەشتۈرىدۇ
            initialize();
        }


        /// <summary>
        /// نۆۋەتتىكى چىسلا
        /// <para>
        /// مەشغۇلات ئېلىپ بېرىلىدىغان چىسلانى كۆرسىتىدۇ
        /// </para>
        /// </summary>
        public DateTime CurrentDateTime
        {
            get
            {
                if (_CurrentDateTime != null)
                {
                    return _CurrentDateTime;
                }
                else
                {
                   return DateTime.Now;
                }
            }
            set
            {
                _CurrentDateTime = value;
            }
        }
    
        /// <summary>
        /// ئۇيغۇرچە نامدىكى چىسلا ھاسىل قىلىش
        /// </summary>
        /// <returns></returns>
        public string ToUyghurNamedString()
        {
            return  DateToString(CurrentDateTime, DateTimeFormatType.UyghurNamed);
        }

        /// <summary>
        /// ئۇيغۇرچە نامدىكى چىسلا ھاسىل قىلىش
        /// </summary>
        /// <param name="dt">چىسلا</param>
        /// <returns></returns>
        public  string ToUyghurNamedString(DateTime dt)
        {
            return DateToString(dt, DateTimeFormatType.UyghurNamed);
        }

        /// <summary>
        /// ئاي ناملىرى سان ئارقىلىق ئىپادىلىنىدىغان چىسلا ھاسىل قىلىش
        /// </summary>
        /// <returns></returns>
        public  string ToNumricString()
        {
            return DateToString(CurrentDateTime, DateTimeFormatType.Numric);
        }

        /// <summary>
        /// ئاي ناملىرى سان ئارقىلىق ئىپادىلىنىدىغان چىسلا ھاسىل قىلىش
        /// </summary>
        /// <param name="dt">چىسلا</param>
        /// <returns></returns>
        public  string ToNumricString(DateTime dt)
        {
            return DateToString(dt, DateTimeFormatType.Numric);
        }

        /// <summary>
        /// لاتىنچە نامدىكى چىسلا ھاسىل قىلىش
        /// </summary>
        /// <returns></returns>
        public string ToLatinNamedString()
        {
            return DateToString(CurrentDateTime, DateTimeFormatType.LatinNamed);
        }

        /// <summary>
        /// لاتىنچە نامدىكى چىسلا ھاسىل قىلىش
        /// </summary>
        /// <param name="dt">چىسلا</param>
        /// <returns></returns>
        public  string ToLatinNamedString(DateTime dt)
        {
            return DateToString(dt, DateTimeFormatType.LatinNamed);
        }

        /// <summary>
        /// چىسلا ياساش
        /// </summary>
        /// <param name="dt">چىسلا</param>
        /// <param name="ft">ھاسىل قىلماقچى بولغان شەكىل</param>
        /// <returns></returns>
        private string DateToString(DateTime dt,DateTimeFormatType ft)
        {

            string strDateText = "";
            switch (ft)
	            {
		            case DateTimeFormatType.UyghurNamed:
                        strDateText = dt.Year.ToString() + "-يىلى " + UyghurMonthName[dt.Month].ToString() + " ئېيىنىڭ " + dt.Day.ToString()+"-كۈنى";
                     break;
                    case DateTimeFormatType.LatinNamed:
                        strDateText = dt.Year.ToString() + "-يىلى " + dt.Day.ToString() + "-"+LatinMonthName[dt.Month].ToString();
                     break;
                    case DateTimeFormatType.Numric:
                        strDateText = dt.Year.ToString() + "-يىلى " + dt.Month.ToString() + "-ئاينىڭ " + dt.Day.ToString()+"-كۈنى";
                     break;
                    default:
                        strDateText = dt.ToString();
                     break;
	            }
                return strDateText;
        }

        /// <summary>
        /// دەسلەپلەشتۈرۈش
        /// ئاينىڭ ناملىرىنى بىكىتىدۇ
        /// </summary>
        private void initialize()
        {
            UyghurMonthName = new System.Collections.Hashtable();
            //UyghurMonthName.Clear();
            UyghurMonthName.Add(1, "قەھرىتان");
            UyghurMonthName.Add(2, "ھۇد");
            UyghurMonthName.Add(3, "نەۋرۇز");
            UyghurMonthName.Add(4, "ئۇمۇت");
            UyghurMonthName.Add(5, "باھار");
            UyghurMonthName.Add(6, "سەپەر");
            UyghurMonthName.Add(7, "چىللە");
            UyghurMonthName.Add(8, "تومۇز");
            UyghurMonthName.Add(9, "مىزان");
            UyghurMonthName.Add(10, "ئوغۇز");
            UyghurMonthName.Add(11, "ئوغلاق");
            UyghurMonthName.Add(12, "كۆنەك");

            LatinMonthName = new System.Collections.Hashtable();
            //LatinMonthName.Clear();
            LatinMonthName.Add(1, "يانۋار");
            LatinMonthName.Add(2, "فىۋرال");
            LatinMonthName.Add(3, "مارت");
            LatinMonthName.Add(4, "ئاپرىل");
            LatinMonthName.Add(5, "ماي");
            LatinMonthName.Add(6, "ئىيۇن");
            LatinMonthName.Add(7, "ئىيۇل");
            LatinMonthName.Add(8, "ئاۋغۇست");
            LatinMonthName.Add(9, "سىنتەبىر");
            LatinMonthName.Add(10, "ئۆكتەبىر");
            LatinMonthName.Add(11, "نويابىر");
            LatinMonthName.Add(12, "دىكابىر");

        }
    }
}
